package generatoreLALR;

import java.util.Iterator;
import java.util.LinkedList;

public class Node2 {
	private Node2 padre;
	private String valore;
	private String operatore;
	private LinkedList <Node2> figli;
	
	
	public Node2(String valueString) {
		super();
		this.operatore = null;
		this.padre = null;
		this.valore = valueString;
		this.figli = new LinkedList();
                System.out.println("\n\nCREATO NODE\n\n");
	}


	public Node2 getPadre() {
		return padre;
	}


	public void setPadre(Node2 padre) {
		this.padre = padre;
	}


	public String getValore() {
		return valore;
	}


	public void setValore(String valore) {
		this.valore = valore;
	}


	public String getOperatore() {
		return operatore;
	}


	public void setOperatore(String operatore) {
		this.operatore = operatore;
	}


	public LinkedList<Node2> getFigli() {
		return figli;
	}


	public void setFigli(LinkedList<Node2> figli) {
		this.figli = figli;
	}
	
	public void addFiglio(Node2 n) {
		this.figli.add(n);
	}
	
	public void printTree(int n) {
		
		if(padre==null) {
			System.out.print("ROOT:   ");
			
		}
		
		System.out.println();
		int i =0;
		while(i<n) {
			System.out.print("\t");
			i++;
		}
		System.out.print(this.getValore().toString());
		Iterator it = this.figli.iterator();
		Node2 node = null;
		n++;
		while(it.hasNext()) {
			node = (Node2)it.next();
			node.printTree(n);
		}
		
	}

	public void printFigli() {
		//System.out.print(this.getValore().toString()+" ");
		Iterator it = this.figli.iterator();
		Node2 node = null;
		while(it.hasNext()) {
			node = (Node2)it.next();
			node.printFigli();
		}
	}
	
	public int contaNodi() {
		int count = 1;//Conta se stesso
		Node2 node = null;
		Iterator it = figli.iterator();
		while (it.hasNext()) {
			node = (Node2)it.next();
			count +=node.contaNodi();
		}
		//System.out.println("Count "+count);
	    return count;
	}

    public String toString() {
        return "Node2{" + "valore=" + valore + '}';
    }
        
        
        
	
}